package org.shj.pattern.state;

/**
 * 状态模式： 允许对象在内部状态发生改变时改变它的行为
 * 主要解决： 对象的行为依赖于它的状态，并且可以根据它的状态改变而改变它的相关行为
 * 何时使用： 代码中包含大量与对象状态有关的条件语句
 * 如何解决： 一种状态用一个类表示
 * 优点： 1. 枚举可能的状态，在枚举状态之前需要确定状态种类。 2. 将所有与某个状态有关的行为放到一个类中，
 *         并且可以方便地增加新的状态，只需要改变对象状态即可改变对象的行为  3. 允许状态转换逻辑与状态
 *         对象合成一体，而不是某一个巨大的条件语句块。
 * 缺点： 1. 增加了类和对象个数  2. 状态模式的结构与实现都较为复杂，如果使用不当将导致程序的结构和代码混乱
 * 
 * 与职责链模式的区别：
 *    从代码上看，两个模式极其相似，不同的地方是： 职责链模式中是由客户端来确定每个处理者的下一个处理者是谁，而
 * 处理者本身并不知道。而状态模式中，状态本身知道下一个状态是什么，而客户端不知道
 * 
 */
public class Main {

	public static void main(String[] args){
		State status = new StateA();
		
		Context ctx = new Context(status);
		ctx.setCurStatus("B");
		
		ctx.request();
	}
}
